const {Tray, Menu} = require('electron');
const path = require('path');
const {autoUpdater} = require("electron-updater");

/**
 * 托盘插件
 * @class
 */
class TrayAddon {

    constructor(app) {
        this.app = app;
        this.cfg = app.config.addons.tray;
        this.tray = null;
    }

    /**
     * 创建托盘
     */
    create() {
        // 开发环境，代码热更新开启时，会导致托盘中有残影
        if (process.env.EE_SERVER_ENV == 'local' && process.env.HOT_RELOAD == 'true') return;

        this.app.console.info('[addon:tray] load');
        const mainWindow = this.app.electron.mainWindow;

        // 托盘图标
        let iconPath = path.join(this.app.config.homeDir, this.cfg.icon);

        // 托盘菜单功能列表
        const self = this;
        let trayMenuTemplate = [
            {
                label: '检查更新',
                click: function () {
                    try {
                        autoUpdater.autoDownload = true;
                        autoUpdater.checkForUpdates();
                    } catch (error) {
                        console.log(error)
                    }
                }
            },

            {
                label: '显示',
                click: function () {
                    mainWindow.show();
                }
            },
            {
                label: '退出',
                click: function () {
                    self.app.appQuit();
                }
            }
        ]

        // 点击关闭，最小化到托盘
        mainWindow.on('close', (event) => {
            const extraObj = this.app.electron.extra;
            if (extraObj.closeWindow == true) {
                return;
            }
            mainWindow.hide();
            event.preventDefault();
        });

        // 实例化托盘
        this.tray = new Tray(iconPath);
        this.tray.setToolTip(this.cfg.title);
        const contextMenu = Menu.buildFromTemplate(trayMenuTemplate);
        this.tray.setContextMenu(contextMenu);
    }
}

TrayAddon.toString = () => '[class TrayAddon]';
module.exports = TrayAddon;